﻿Namespace SchoolClick.Controllers
    Public Class ProfesoresController
        Inherits AuthorizeBaseController

        <Authorize(Roles:="PRF")> _
        <ConstructSubMenu()> _
        Function Index() As ActionResult
            Return View()
        End Function

        <ConstructSubMenu()> _
        <Authorize(Roles:="PRF")> _
        Function ViewIngCalificacion() As ActionResult
            Return View()
        End Function

        <ConstructSubMenu()> _
        <Authorize(Roles:="PRF")> _
        Function Gestion_de_calificaciones() As ActionResult
            Return View()
        End Function

        <HttpPost()> _
        <Authorize(Roles:="PRF")> _
        Public Function _get_actividades_modificables_byA(IDGrado As Integer, IDMateria As Integer, Actividad As String, request As JqGridRequest) As JsonResult
            Dim db As New SchoolClickDAL
            Dim statusAE = db.IAñoEscolar.GetStatusAñoEscolar

            'Preparamos los datos que vamos a enviar
            Dim datos As IEnumerable(Of ACTIVIDADES_EVALUATIVAS_MOD_BYACT) = db.IProfesores.GetActividadesByActMod(IDGrado, IDMateria,
                                                                                                          String.Format("{0}-{1}", statusAE.PERIODO_ACTIVO, statusAE.ANIO_ESCOLAR), Actividad) _
                                                                                 .Skip((request.PageIndex) * request.RecordsCount) _
                                                                                 .Take(request.RecordsCount),
                total = db.IProfesores.GetActividadesByActMod(IDGrado, IDMateria, String.Format("{0}-{1}", statusAE.PERIODO_ACTIVO, statusAE.ANIO_ESCOLAR), Actividad).Count,
                response As New JqGridResponse With {
                    .TotalPagesCount = Integer.Parse(Math.Ceiling(CDec(total) / CDec(request.RecordsCount))),
                    .PageIndex = request.PageIndex,
            .TotalRecordsCount = total
                }

            'Preparamos la salida de los datos en formato del modelo del jqGrid
            response.Records.AddRange(datos.Select(Function(p) New JqGridRecord(Of jqGrid.jqGRID_ACTIVIDADES_MODIFICABLES)(p.ID_SUBACTIVIDAD,
                                                                New jqGrid.jqGRID_ACTIVIDADES_MODIFICABLES With {
                                                                        .Actividad = p.ACTIVIDAD,
                                                                        .Porcentaje = p.PORCENTAJE
                                                                    })))
            Return New JqGridJsonResult() With {.Data = response}
        End Function

        <HttpGet()> _
        <Authorize(Roles:="PRF")> _
        <JFHandleExceptionMessage(Order:=1)> _
        Function _get_NewActividad(IDGrado As Integer, IDMateria As Integer, Actividad As String) As ActionResult
            ViewBag.IDGrado = IDGrado
            ViewBag.IDMateria = IDMateria
            ViewBag.Actividad = Actividad
            Return PartialView()
        End Function

        <HttpPost()> _
        <Authorize(Roles:="PRF")> _
        <JFValidarModel()> _
        <JFHandleExceptionMessage(Order:=1)> _
        Function _save_new_actividad_eva_mod(model As InfoActividadEvaModificable, IDGrado As Integer, IDMateria As Integer, IDActividad As String) As JsonResult
            Dim db As New SchoolClickDAL
            Dim statusAE = db.IAñoEscolar.GetStatusAñoEscolar
            db.IProfesores.SaveActividadEvaluativaMod(IDGrado, IDMateria,
                                                      String.Format("{0}-{1}", statusAE.PERIODO_ACTIVO, statusAE.ANIO_ESCOLAR),
                                                      IDActividad, model.Actividad, model.Porcentaje)
            Return Json(New With {.success = True,
                                  .notify = New JFNotifySystemMessage("Se ha creado correctamente la nueva actividad evaluativa en el sistema. A partir de este momento ya podrá ingresar notas de los alumnos en esta actividad.",
                                                                   titulo:="¡Se creo correctamente la nueva actividad!",
                                                                   permanente:=False,
                                                                   icono:=JFNotifySystemIcon.NewDoc)})
        End Function

        <HttpPost()> _
        <Authorize(Roles:="PRF")> _
        Function _delete_actividad_eva_mod(id As String) As JsonResult
            Dim db As New SchoolClickDAL
            Try
                db.IProfesores.EliminarActividadEvaluativaMod(id)
                Return Json(True)
            Catch ex As Exception
                HttpContext.Response.StatusCode = 500
                HttpContext.Response.TrySkipIisCustomErrors = True
                Return Json(ex.Message)
            End Try
        End Function

#Region "METODOS PARA OBTENER EL LISTADO DE ALUMNOS EN LOS GRADOS QUE IMPARTE EL PROFESOR"
        <ConstructSubMenu()> _
        <Authorize(Roles:="PRF")> _
        Function List_Alumnos_ByGrado() As ActionResult
            Return View()
        End Function

        <HttpGet()> _
        <Authorize(Roles:="PRF")> _
        <JFHandleExceptionMessage(Order:=1)> _
        Function _get_alumnos_in_grado_imparte_prf() As ActionResult
            Dim db As New SchoolClickDAL

            Dim statusAE = db.IAñoEscolar.GetStatusAñoEscolar       'Obtenemos el STATUS del Año Escolar

            'Verificamos si el Año Escolar esta abierto y no estemos en el periodo de creacion del año escolar
            If (Not statusAE.IS_CLOSE AndAlso Not db.IAñoEscolar.IsEdit) Then
                ViewBag.Año = statusAE.ANIO_ESCOLAR
                Return PartialView("_get_alumnos_bygrado")
            End If

            ViewBag.Titulo = "No existe ningún año escolar activo"
            ViewBag.Mensaje = "Lo sentimos, pero en estos momentos no se ha encontrado ningún año escolar activo, por lo tanto es imposible realizar esta operación.<br /><br />Esto puede deberse a las siguientes razones:<br />- El Año Escolar ha finalizado.<br />- El Año Escolar actualmente se esta creando y configurando <br />- El Año Escolar se encuentra en el Periodo de Recuperación o Recuperación Extraordinario."
            Return PartialView("_error_page_for_year_custom")
        End Function

        <HttpPost()> _
        <Authorize(Roles:="PRF")> _
        <JFHandleExceptionMessage(Order:=1)> _
        Function _get_grados_imparte_profesor(Year As String) As JsonResult
            Dim db As New SchoolClickDAL


            'Recuperamos los grados disponibles para la matricula
            Dim list = db.IGrados.GetGradosByProfesorImparter(Year, User.Identity.Name).Select(Function(gd) New SelectListItem With {
                                                                                                   .Text = gd.TITULO,
                                                                                                    .Value = gd.ID_GRADO
                                                                                                }).ToArray
            Return Json(New JFComboboxToJSON(list), JsonRequestBehavior.AllowGet)
        End Function
#End Region

#Region "Metodos para carga de filtro grado materia"
        <HttpPost()> _
       <JFHandleExceptionMessageAttribute(Order:=1)> _
        Function _getGrados_AJAX() As JsonResult
            Dim db As New SchoolClickDAL

            'Recuperamos los grados disponibles para la matricula
            Dim list = db.IProfesores.GetGradoP(User.Identity.Name).Select(Function(p) New With {.Text = String.Format("{0} año de bachillerato {1} - {2}", p.GRADO, p.ESPECIALIDAD, p.SECCION),
                                                                            .Value = p.ID_GRADO}).ToArray
            Return Json(New JFComboboxToJSON(list), JsonRequestBehavior.AllowGet)
        End Function

        <HttpPost()> _
          <JFHandleExceptionMessageAttribute(Order:=1)> _
        Function _getMaterias_AJAX(Id_grado As Integer) As JsonResult
            Dim db As New SchoolClickDAL

            'Recuperamos los grados disponibles para la matricula
            Dim list = db.IProfesores.GetMateriaP(User.Identity.Name, Id_grado).Select(Function(m) New With {.Text = String.Format("{0}", m.MATERIA),
            .Value = m.ID_MATERIA}).ToArray
            Return Json(New JFComboboxToJSON(list), JsonRequestBehavior.AllowGet)
        End Function

        <HttpPost()> _
         <JFHandleExceptionMessageAttribute(Order:=1)> _
        Function _getActividades_AJAX(Id_grado As Integer, Id_Materia As Integer, Id_Periodo As String) As JsonResult
            Dim db As New SchoolClickDAL

            Dim statusAE = db.IAñoEscolar.GetStatusAñoEscolar

            'Recuperamos los grados disponibles para la matriculas
            Dim list = db.IProfesores.GetActividadP(User.Identity.Name, Id_grado, Id_Materia, String.Format("{0}-{1}", statusAE.PERIODO_ACTIVO, statusAE.ANIO_ESCOLAR)).Select(Function(a) New With {.Text = String.Format("{0}", a.ACTIVIDAD),
            .Value = a.ID_SUBACTIVIDAD}).ToArray
            Return Json(New JFComboboxToJSON(list), JsonRequestBehavior.AllowGet)
        End Function

        <HttpGet()> _
        <Authorize(Roles:="PRF")> _
        <JFHandleExceptionMessage(Order:=1)> _
        Function _cargarGradoMateria() As ActionResult
            Dim db As New SchoolClickDAL

            Dim statusAE = db.IAñoEscolar.GetStatusAñoEscolar       'Obtenemos el STATUS del Año Escolar


            'Verificamos si el Año Escolar esta abierto y no estemos en el periodo de creacion del año escolar
            If (Not statusAE.IS_CLOSE AndAlso Not db.IAñoEscolar.IsEdit AndAlso Not IsNothing(statusAE.PERIODO_ACTIVO)) Then
                ViewBag.Año = statusAE.ANIO_ESCOLAR
                ViewBag.Periodo = statusAE.PERIODO_ACTIVO
                Return PartialView()
            End If

            ViewBag.Titulo = "No existe ningún año escolar activo"
            ViewBag.Mensaje = "Lo sentimos, pero en estos momentos no se ha encontrado ningún año escolar activo, por lo tanto es imposible realizar esta operación.<br /><br />Esto puede deberse a las siguientes razones:<br />- El Año Escolar ha finalizado.<br />- El Año Escolar actualmente se esta creando y configurando <br />- El Año Escolar se encuentra en el Periodo de Recuperación o Recuperación Extraordinario."
            Return PartialView("_error_page_for_year_custom")
        End Function

        <HttpGet()> _
          <Authorize(Roles:="PRF")> _
          <JFHandleExceptionMessage(Order:=1)> _
        Function _cargaPeliminarGradoMatricula() As ActionResult
            Dim db As New SchoolClickDAL

            Dim statusAE = db.IAñoEscolar.GetStatusAñoEscolar       'Obtenemos el STATUS del Año Escolar


            'Verificamos si el Año Escolar esta abierto y no estemos en el periodo de creacion del año escolar
            If (Not statusAE.IS_CLOSE AndAlso Not db.IAñoEscolar.IsEdit AndAlso Not IsNothing(statusAE.PERIODO_ACTIVO)) Then
                ViewBag.Año = statusAE.ANIO_ESCOLAR
                ViewBag.Periodo = statusAE.PERIODO_ACTIVO
                Return PartialView()
            End If

            ViewBag.Titulo = "No existe ningún año escolar activo"
            ViewBag.Mensaje = "Lo sentimos, pero en estos momentos no se ha encontrado ningún año escolar activo, por lo tanto es imposible realizar esta operación.<br /><br />Esto puede deberse a las siguientes razones:<br />- El Año Escolar ha finalizado.<br />- El Año Escolar actualmente se esta creando y configurando <br />- El Año Escolar se encuentra en el Periodo de Recuperación o Recuperación Extraordinario."
            Return PartialView("_error_page_for_year_custom")
        End Function

        <HttpPost()> _
       <Authorize(Roles:="PRF")> _
        Public Function _ingreso_notas_actividades(id As Integer, request As JqGridRequest) As JsonResult
            Dim db As New SchoolClickDAL
            Dim statusAE = db.IAñoEscolar.GetStatusAñoEscolar

            'Preparamos los datos que vamos a enviar
            Dim datos As IEnumerable(Of GET_NOTAS_ACTIVIDADES_DATATYPE) = db.IProfesores.GetNotasAlumnosWithByActividad(id) _
                                                                                 .Skip((request.PageIndex) * request.RecordsCount) _
                                                                                 .Take(request.RecordsCount),
                total = db.IProfesores.GetNotasAlumnosWithByActividad(id).Count,
                response As New JqGridResponse With {
                    .TotalPagesCount = Integer.Parse(Math.Ceiling(CDec(total) / CDec(request.RecordsCount))),
                    .PageIndex = request.PageIndex,
            .TotalRecordsCount = total
                }

            'Preparamos la salida de los datos en formato del modelo del jqGrid
            response.Records.AddRange(datos.Select(Function(p) New JqGridRecord(Of jqGrid.NOTAS_EVALUACIONES)(p.ID_ALUMNO,
                                                                New jqGrid.NOTAS_EVALUACIONES With {
                                                                        .Alumno = p.NOMBRE,
                                                                        .NIE = p.NIE,
                                                                        .Nota = p.NOTA_ACT
                                                                    })))
            Return New JqGridJsonResult() With {.Data = Response}
        End Function

        <HttpPost()> _
        <Authorize(Roles:="ERA")> _
        Function _save_nota_actividades(id As String, Nota As String) As JsonResult
            'Dim db As New SchoolClickDAL
            'Dim splitID As IEnumerable(Of String) = id.Split("-"c)
            'Try
            '    db.IProfesores._save_nota_actividades(splitID(0), Nota)
            Return Json(True)
            'Catch ex As Exception
            '    HttpContext.Response.StatusCode = 500
            '    HttpContext.Response.TrySkipIisCustomErrors = True
            '    Return Json(ex.Message)
            'End Try
        End Function
#End Region

        <ConstructSubMenu()> _
        <Authorize(Roles:="PRF")> _
        Function Rep_Resumen_Notas() As ActionResult
            Return View()
        End Function

        <HttpPost()> _
        <Authorize(Roles:="PRF")> _
        <JFHandleExceptionMessage(Order:=1)> _
        Function _get_anios_escolares() As JsonResult
            Dim db As New SchoolClickDAL


            'Recuperamos los grados disponibles para la matricula
            Dim list = db.IAñoEscolar.GetAños.OrderByDescending(Function(a) a.ANIO_ESCOLAR) _
                                             .Select(Function(ae) New SelectListItem With {
                                                        .Text = ae.ANIO_ESCOLAR,
                                                        .Value = ae.ANIO_ESCOLAR
                                                    }).ToArray
            Return Json(New JFComboboxToJSON(list), JsonRequestBehavior.AllowGet)
        End Function

        <HttpPost()> _
        <Authorize(Roles:="PRF")> _
        <JFHandleExceptionMessage(Order:=1)> _
        Function _get_periodos_eva_byyear(Year As String) As JsonResult
            Dim db As New SchoolClickDAL


            'Recuperamos los grados disponibles para la matricula
            Dim list = db.IAñoEscolar.GetPeriodosCloseAndActivo.Where(Function(p) p.ANIO_ESCOLAR = Year).Select(Function(p) New SelectListItem With {
                                                                                                   .Text = String.Format("Periodo No. {0}", p.PERIODO1.Substring(1)),
                                                                                                    .Value = p.ID_PERIODO
                                                                                                }).ToArray
            Return Json(New JFComboboxToJSON(list), JsonRequestBehavior.AllowGet)
        End Function
    End Class
End Namespace
